# [JavaScript 有个 Unicode 的天坑] 0014-D
unicode UTF UCS
Unicode:用一个码点(code point)映射一个字符。码点值的范围是从U+0000到U+10FFFF,可以表示超过110万个符号
Unicode最前面的65536个字符位,称为基本平面(BMP-—Basic Multilingual Plane),它的码点范围是从U+0000到U+FFFF
补充平面16个
UTF(Unicode transformation format)Unicode转换格式,是服务于Unicode的,用于将一个Unicode码点转换为特定的字节序列。
UTF-8 可变字节序列,用1到4个字节表示一个码点
UCS(Universal Character Set)通用字符集,是一个ISO标准,目前与Unicode可以说是等价的。
UTF-8对ASCⅡ编码是兼容的,都是一个字节,超过U+07FF的部分则用了复杂的转换方式来映射Unicode,
UTF-16对于BMP的码点,采用2个字节进行编码,而BMP之外的码点,用4个字节组成代理对
UCS-2是一个过时的编码方式,因为它只能编码基本平面(BMP)的码点,在BMP的编码上,与UTF-16是一致的,所以可以认为是UTF-16的一个子集。
UCS-4则与UTF-32等价,都是用4个字节来编码Unicode。
javascript字符处理
javascript(引擎) UCS-2 编码
坑1——length属性
坑2——反转字符串
坑3——码点与字符互转
坑4——正则匹配
ES6的Unicode支持
# [字符串js字符串与Unicode编码怎么做互相转换_百度知道] 0016-D
javascript字符普通处理
‘a’.charCodeAt(0)// 97
‘a’.charCodeAt().toString(16) //‘61’ 即’\u0061’
String.fromCharCode(97) // ‘a’
‘\u0061’ // ‘a’
//十进制转其他
var x=97; x.toString(16) // ‘61’
//其他转十进制
parseInt(61,16) // 97
//其他转其他
//先用parseInt转成十进制再用toString转到目标进制
[计算字符串字节数] x2 017-D
所以想办法在JavaScript中判断在UTF-8下存储的String的字节数,在网上找到很多关于Unicode介绍的文档,最重要的是字符编码数值对应的存储长度:
UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx (1字节)
0080 - 07FF 110xxxxx 10xxxxxx (2字节)
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx (3字节)
if(charset === ‘utf-16’ || charset === ‘utf16’){
}else{// utf-8
if (charCode < 0x007f) {
totalLength = totalLength + 1;
} else if ((0x0080 <= charCode) && (charCode <= 0x07ff)) {
totalLength += 2;
} else if ((0x0800 <= charCode) && (charCode <= 0xffff)) {
totalLength += 3;
}
}
# 补充: 计算JavaScript对象大小
JavaScript对象大小
js库:https://github.com/miktam/sizeof/blob/master/index.js
nodejs: npm install object-sizeof
Google Chrome 堆分析器允许你检查对象内存使用情况:后我在 profiler ( 录制录音后) 中找到了对象的完整大小以及它在”保留的大小”下的所有内容。
1 | function roughSizeOfObject( value, level ) { |